package com.me.study.javaBasic.collection;

import com.me.study.javaCore.enumm.ColorEnum;

import java.util.EnumMap;
import java.util.Map;

/**
 * @author ME
 * @date 2020/11/27
 */
public class TestEnumMap {

    public static void main(String[] args) {
        // EnumMap 没有空构造，必须指定枚举class类型。当然构造函数也可以接收一个Map = new EnumMap<>(EnumMap/Map);
        Map<ColorEnum, String> enumMap = new EnumMap<>(ColorEnum.class);
        enumMap.put(ColorEnum.BLACK, "黑色");
        enumMap.put(ColorEnum.WHITE, "白色");
        enumMap.put(ColorEnum.RED, "红色");
        // 故意重复放一个
        enumMap.put(ColorEnum.WHITE, "白色");
        // 遍历：发现 EnumMap 它的存储是有序的
        System.out.println("EnumMap put()之后 是有序的: 根据 Enum 定义的顺序排序");
        enumMap.forEach((k, v) -> System.out.print(k + ":" + v + "   "));
        System.out.println();

        // 可以看到，它并不会发生并发修改异常 ConcurrentModificationException
        System.out.println("\nEnumMap: forEach() and put() -- 不会并发修改异常 ConcurrentModificationException");
        enumMap.forEach((k, v) -> {
            if (k == ColorEnum.WHITE) {
                enumMap.put(ColorEnum.GREEN, "绿色");
            }
            System.out.print(k + ":" + v + "   ");
        });

        // EnumMap 的 key 不允许为null  java.lang.NullPointerException
        System.out.println("\n\nEnumMap： Key 不允许为 'null' -- NullPointerException");
        enumMap.put(null,"未知");
    }

}
